C语言经典算法(九)——递归实现二分查找的两种方法

后继续整理算法并写出自己的理解和备注。 C++实现的:递归实现二分查找算法

1、 递归实现二分查找
<1> 题目描述:针对数据,进行二分查找(要求:数据的排列有序)
<2> 方法一:概念法
<3> 方法二:递归法
源码:
一、 递归实现二分查找
1、 概念法

#include<iostream>
#include<assert.h>
using namespace std;
int Search(int ar[], int n, int key)
{
    int low = 0;//低位值
    int high = n-1;//高位值是元素个数-1
    int mid;
    while(low <= high)
    {
        mid = (low+high)/2;
        if(key < ar[mid])
        {
            high = mid-1;//二分
        }
        else if(key > ar[mid])
        {
            low = mid+1;//二分
        }
        else
            return mid;//找到值
    }
    return -1;//查找数据不存在
}
void main()
{
    int ar[10] = {12,23,34,45,56,67,78,89,90,100};//这种算法只能在数组有序的情况使用,如果无序,先进行排序
    int n = sizeof(ar)/sizeof(int);
    int key;
    cout<<"请输入要查找的key值:>";
    cin>>key;
    cout<<"pos :> "<<Search(ar,n,key)<<endl;
}

2、 递归法

#include<iostream>
#include<assert.h>
using namespace std;
int Search(int ar[], int low, int high, int key)
{
    if(low > high)//查找不到
        return -1;
    int mid = (low+high)/2;
    if(key == ar[mid])//查找到
        return mid;
    else if(key < ar[mid])
        return Search(ar,low,mid-1,key);
    else
        return Search(ar,mid+1,high,key);
}
void main()
{
    int ar[10] = {12,23,34,45,56,67,78,89,90,100};
    int n = sizeof(ar)/sizeof(int);
    int key;
    cout<<"请输入要查找的key值:>";
    cin>>key;
    cout<<"pos :> "<<Search(ar,0,n-1,key)<<endl;
}
  • 8
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是用C语言递归算法实现二分查找的代码: ```c #include <stdio.h> int binarySearch(int arr[], int left, int right, int target) { if (right >= left) { int mid = left + (right - left) / 2; if (arr[mid] == target) { return mid; } if (arr[mid] > target) { return binarySearch(arr, left, mid - 1, target); } return binarySearch(arr, mid + 1, right, target); } return -1; } int main() { int arr[] = {2, 4, 6, 8, 10, 12, 14, 16}; int n = sizeof(arr) / sizeof(arr[0]); int target = 10; int result = binarySearch(arr, 0, n - 1, target); if (result == -1) { printf("Element not found"); } else { printf("Element found at index %d", result); } return 0; } ``` 上述代码中,`binarySearch`函数实现二分查找。它接收一个整数数组、左边界、右边界和目标元素作为参数,并返回目标元素在数组中的索引。如果目标元素不在数组中,则返回-1。 在函数中,我们首先计算中间元素的索引,然后将目标元素与中间元素进行比较。如果中间元素等于目标元素,则返回中间元素的索引。如果中间元素大于目标元素,则递归调用`binarySearch`函数,在左子数组中查找目标元素。如果中间元素小于目标元素,则递归调用`binarySearch`函数,在右子数组中查找目标元素。 在`main`函数中,我们定义了一个整数数组`arr`、目标元素`target`,并调用`binarySearch`函数在数组中查找目标元素。最后,根据返回值判断目标元素是否在数组中,并输出结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值